/**
* @file         
* @brief		汉诺塔.
* @details	    基本功能演示.
* @author		conkty@126.com
* @date		    2023
* @version	    v0.1
* @par 更新记录:         
*	v0.1: 初建\n
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

// 将n个盘子从A移到C， C作为过渡
void Hanoi(int n, char A,char B,char C);
// 将编号i的圆盘从柱子x移到柱子y
void Move(char x, int i, char y);

// 移动次数计数
int m = 0;

int main()
{
    int n = 3;

    printf("汉诺塔的层数:\n");
    scanf(" %d",&n);
    Hanoi(n, 'A', 'B', 'C');

    return 0;
}

void Hanoi(int n, char A, char B, char C)
{
    if (n == 1)
        Move(A, n, C);            // 只剩一个了，从A到C移动
    else
    {
        Hanoi(n - 1, A, C, B);    // n-1个，从A到B，C过渡
        Move(A, n, C);
        Hanoi(n - 1, B, A, C);    // n-1个，从B到C，A过渡
    }
}

void Move(char x, int i, char y)
{
    printf("step %d : moving %d from %c to %c … \n",++m,i,x,y);
}